/*
vm.runInThisContext(code, [filename]);

类似于eval	预编译代码，在一个独立的上下文环境中运行代码返回结果
不同于eval	在该上下文环境中，不能访问任何模块中定义的本地变量、属性值、对象或方法
*/


var vm = require("vm");
var e = 0;

/*
vm.runInThisContext("e = e + 1");

运行结果：
vm.runInThisContext("e = e + 1");
   ^
ReferenceError: e is not defined
*/


/*
eval("e = e + 1");
eval("console.log(e)");

运行结果：
1
*/


// 事实上，runInThisContext方法维护的是一个独立的上下文运行环境
// 因此，如果在一个runInThisContext方法中定义一个变量、对象或方法，那么可以在之后的runInThisContext方法中访问它们

vm.runInThisContext("var obj = {'name' : 'kathy'}");
vm.runInThisContext("obj.func = function() { console.log(this.name); }");
vm.runInThisContext("console.log(obj.name);");
vm.runInThisContext("obj.func(); ");

/*
运行结果：
kathy
kathy
*/